package SecondeStage.MianXiangDuiXiang.AbstractClass.InnerClass;

public class StaticInnerClass {
    public static void main(String[] args) {
        Outer06 outer06 = new Outer06();
        // 外部其他类访问静态内部类成员
        // 1. 因为是静态内部类，可以通过类名直接访问
        Outer06.Inner06 inner06 = new Outer06.Inner06();
        inner06.say();
        // 2.在外部类中编写一个方法，返回一个Inner06对象
        Outer06.Inner06 inner07 = outer06.getInner06Instance();
    }
}


class Outer06{
    private static int n1 =10;
    public static String name="张三";
    private void hi(){
        System.out.println("你好");
    }

    // 可以添加任意的修饰符，因为成员内部类的地位本来就是外部类的一个成员,所以作用域为整个类体
    // 可以访问外部类的所有静态成员,包含私有的，但不能直接访问非静态成员
    static class Inner06{
        private  int n1 =66;
        public void say(){
            System.out.println("n1="+n1 +"  name="+name);
            //hi(); //不能访问非静态成员
            // 如果外部类和内部类的成员重名时，默认遵循就近原则，如果想要访问外部类的成员，使用 外部类名.成员 去访问
            System.out.println("n1="+n1 +"  name="+name + "  外部类的n1="+Outer06.n1);
        }
    }

    public void f1(){
        // 访问成员内部类的成员
        Inner06 inner06 =new Inner06();
        inner06.say();
    }

    public Inner06 getInner06Instance(){
        return new Inner06();
    }
}